package testes;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.Calendar;

import org.junit.Before;
import org.junit.Test;

import alugaveis.Alugavel;
import alugaveis.Aluguel;
import alugaveis.Bluray;
import alugaveis.DVD;
import alugaveis.GeneroFilme;
import alugaveis.GeneroJogo;
import alugaveis.PS3;

import exceptions.ParametroNegativoException;
import exceptions.ParametroVazioException;

public class AluguelTest {

	ArrayList<Alugavel> array;
	ArrayList<Alugavel> arrayvazio;
	Aluguel cesta;

	@Before
	public void setUp() throws Exception {
		array = new ArrayList<Alugavel>();
		arrayvazio = new ArrayList<Alugavel>();
		array.add(new DVD("Zero Dark Thirty", 1.0, 2012, 16, true, 2, 120, "Americano", false, true, GeneroFilme.ACAO));
		array.add(new PS3("God of War", 5.0, 2010, 18, false, 8, "seila", GeneroJogo.LUTA));
		array.add(new Bluray("How to train your dragon", 1.0, 2010, 10, false, 2, 115, "Americano", false, true, GeneroFilme.ANIMACAO));
	}

	@Test
	public void testAluguel(){
		try {
			cesta = new Aluguel(null, 4);
			fail("Era pra ter quebrado");
		
		} catch (ParametroVazioException e) {
			assertEquals("O parametro nao pode ser nulo ou vazio", e.getMessage());
		
		} catch (ParametroNegativoException e) {
			assertEquals("O parametro nao pode ser nulo ou negativo.", e.getMessage());
		}
		
		try {
			cesta = new Aluguel(array, -2);
		} catch (ParametroVazioException e) {
			assertEquals("O parametro nao pode ser nulo ou vazio", e.getMessage());
		
		} catch (ParametroNegativoException e) {
			assertEquals("O parametro nao pode ser nulo ou negativo.", e.getMessage());
		}		
	}

	@Test
	public void testGetAlugueis() throws ParametroVazioException, ParametroNegativoException {
		cesta = new Aluguel(array, 4);
		arrayvazio = array;
		assertTrue(cesta.getAlugueis().equals(arrayvazio));
		}

	@Test
	public void testGetDataAluguel() throws ParametroVazioException, ParametroNegativoException {
		cesta = new Aluguel(array, 4);
		assertEquals("Resultado igual esperado.", Calendar.DAY_OF_MONTH, cesta.getDataAluguel());
	}

	@Test
	public void testGetTempoAluguel() throws ParametroVazioException, ParametroNegativoException {
		cesta = new Aluguel(array, 4);
		assertEquals("4 esperado", 4, cesta.getTempoAluguel());
	}

	@Test
	public void testCalculaMulta() throws ParametroVazioException, ParametroNegativoException {
		cesta = new Aluguel(array, 4);
		assertEquals(3, cesta.calculaMulta(2), 0.3);
	}

}
